export default {
  /**
   * 根据路由对象或路由集合定义模块
   * @param {any} routers
   */
  def(routers) {
    if (!routers) {
      return null
    }

    function parseRouter(item, name, path) {
      var newItem = {}
      Object.merge(newItem, item, (key) => {
        return key !== 'children'
      })
      if (!newItem.name) {
        newItem.name = newItem.path
      }
      if (!newItem.path) {
        if (!path) {
          if (name) {
            newItem.path = '/' + name + '/' + newItem.name
          } else {
            newItem.path = '/' + newItem.name
          }
        } else {
          newItem.path = path + '/' + newItem.name
        }
      }
      if (name) {
        newItem.name = name + '.' + newItem.name
      }
      if (item.children) {
        if (item.children.IsArray) {
          newItem.children = parseRouters(item.children, newItem.name, newItem.path)
        } else if (item.children.IsFunction) {
          newItem.children = item.children(newItem.name, newItem.path)
        }
      }
      return newItem
    }

    function parseRouters(items, name, path) {
      var newItems = []
      items.forEach((item) => {
        if (item.IsFunction) {
          var childItems = item(name, path)
          if (childItems.IsArray) {
            newItems.push.apply(newItems, childItems)
          } else {
            newItems.push(childItems)
          }
        } else {
          newItems.push(parseRouter(item, name, path))
        }
      })
      return newItems
    }

    /**
      * 根据模块名称生成对应层级关系的路由
      * @param {String} moduleName  模块名称
      * @param {String} path  模块的跟路径
      */
    return (moduleName, path) => {
      return routers.IsArray ? parseRouters(routers, moduleName, path) : parseRouter(routers, moduleName, path)
    }
  }
}
